package des.wangku.operate.standard.task;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


/**
 * 主任务源结构抽像类<br>
 * 主要得到注解中项目的基础信息，以及项目名称之类规则<br>
 * 
 * @author Sunjian
 * @version 1.0
 * @since jdk1.8
 */
public abstract class AbstractTask0_Original extends Composite implements InterfaceAnnoProjectTaskAnalysis {
	/**
	 * 空的构造函数。如果调用此构造函数，则不初始化内部方法，只生成本Bean<br>
	 * 用于抽出项目class中的信息。无其它功能<br>
	 * 含 Composite 一个参数的构造函数必须存在，平台检索时需要此函数<br>
	 * @param parent Composite
	 */
	public AbstractTask0_Original(Composite parent) {
		super(parent, SWT.NONE);
	}
	public AbstractTask0_Original(Composite parent, int style) {
		super(parent, style);
	}
	/**
	 * 通过注解得到是否自动装载
	 * @return boolean
	 */
	public boolean getTask_AutoLoad() {
		return this.getAnno_AutoLoad();
	}
	/**
	 * 通过注解得到是否在有效期之内
	 * @return boolean
	 */
	public boolean getTask_Effective() {
		return getAnno_Effective();
	}
	/**
	 * 通过注解得到是否过期
	 * @return boolean
	 */
	public boolean getTask_ExpireAll() {
		return getAnno_Expire();
	}

	/**
	 * 通过注解得到组名<br>
	 * 默认为空
	 * @return String
	 */
	public String getTask_GroupAll() {
		String group = this.getAnno_Group();
		return group == null ? "" : group;
	}
	/**
	 * 得到项目编号 如 输入:P02 则菜单为:[P02]XXXX<br>
	 * 如果在model中出现同名的前缀，则只保留其中一个。<br>
	 * 即：项目前缀唯一<br>
	 * 不区别大小写<br>
	 * 可以使用@AnnoProjectTask注解中的 identifier 进行设置<br>
	 * 未来将作废
	 * @return String
	 */
	public abstract String getTask_Identifier();

	/**
	 * 通过方法还是注解得到PXX 不进行大小写转换 过滤两侧空格，允许返回null
	 * @return String
	 */
	public String getTask_IdentifierAll() {
		String identifier = getTask_Identifier();
		if (identifier != null && identifier.trim().length() > 0) return getTask_Identifier().trim();
		identifier = getAnno_Identifier();
		if (identifier == null) return null;
		return identifier.trim();
	}

	/**
	 * 得到pX，把前缀最小写<br>
	 * 如果没有编号，则返回空
	 * @return String
	 */
	public String getTask_IdentifierLCase() {
		String id = getTask_IdentifierAll();
		if (id == null) return "";
		return id.toLowerCase();
	}
	/**
	 * 得到项目名称<br>
	 * 可以使用@AnnoProjectTask注解中的 name 进行设置<br>
	 * 未来将作废
	 * @return String
	 */
	public abstract String getTask_Name();

	/**
	 * 得到项目名称，通过方法与注解
	 * @return String
	 */
	public String getTask_NameAll() {
		String name = getTask_Name();
		if (name != null) return name.trim();
		name = getAnno_Name();
		if (name == null) return null;
		return name.trim();
	}

	/**
	 * 启动后进行操作
	 */
	void startup_Load() {
		
	}
	/**
	 * 销毁时启动
	 */
	void disposeTask() {
		
	}
	/** 日志 */
	static final Logger logger = LoggerFactory.getLogger(AbstractTask0_Original.class);
}
